/**
 * Created by jackliu on 15/12/16.
 */

var common = require('../../common');
var pool = require('../index');
var mysql = require('mysql');
var ItbBaseModel = require('./ItbBaseModel');


// Schema 结构
var ItbMemberModel = function(obj){
    ItbBaseModel.call(this,obj);

  // 以下为表定义数据，需要的字段就填入
  //`member_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '会员id',
  //`user_id` bigint(20) NOT NULL COMMENT '用户id',
  //`vip` int(2) NOT NULL DEFAULT '0' COMMENT '0:无,10:vip会员',
  //`desc` text COMMENT '备注',
  //`expiry_time` datetime NOT NULL COMMENT '有效截止日期',
  //`last_expiry_time` datetime DEFAULT NULL COMMENT '上一次有效截止日期的历史纪录',
  //`create_time` datetime NOT NULL,
  //`update_time` datetime NOT NULL,
  //`update_by` varchar(50) NOT NULL DEFAULT '',
  //`del_flg` int(1) NOT NULL DEFAULT '0' COMMENT '删除flg',

};
ItbMemberModel.prototype = new ItbBaseModel();

// 取得表名
ItbMemberModel.prototype.getTableName = function(){
    return 'itb_member';
};
// 取得查询语句中where 后面匹配主键的条件（需要各派生类进行重载）
ItbMemberModel.prototype.getWhereConditionOfKeyEqual = function(){
    return 'member_id='+this.member_id;
};

// 查找vip会员信息
ItbMemberModel.prototype.findVipMember = function(userId, callback){

    pool.pool.getConnection(function(err, connection) {
        // 链接出错
        if(err){
            console.log('ItbMemberModel [findVipMember] getConnection err:' + err);
            return callback(err, null);
        }
        var sql  =  " SELECT m.*, "+
            " CASE WHEN m.expiry_time>sysdate() THEN 1 ELSE 0 END AS validFlg, " +
            " DATE_FORMAT(m.expiry_time, '%Y/%m/%d %H:%i:%S') AS str_expiry_time "+
            " FROM itb_user u, " +
            "      itb_member m " +
            " WHERE u.user_id= " + userId +
            "   AND u.del_flg=0 " +
            "   AND m.user_id=u.user_id " +
            "   AND m.vip=10 " +
            "   AND m.del_flg=0 ";
        console.log(sql);
        connection.query(sql, function(error, result) {
            connection.release();
            if(error){
                console.log('ItbMemberModel [findVipMember] query err: ' + error);
            }
            if(result && result.length > 0){
                return callback(error, result[0]);
            } else {
                return callback(error, null);
            }

        });
    });
};

// 新建vip会员
// stTime: 有效开始日期 'yyyy-mm-dd HH:MM:SS'
// mCnt: 有效期（月个数）
ItbMemberModel.prototype.createVipMember = function(userId, stTime, mCnt, callback){

    pool.pool.getConnection(function(err, connection) {
        // 链接出错
        if(err){
            console.log('ItbMemberModel [createVipMember] getConnection err:' + err);
            return callback(err, null);
        }

        var expStart = 'now()';
        if(stTime && stTime.length>0) {
            expStart = '"'+stTime+'"';
        }

        var sql = ' INSERT INTO itb_member '+
            ' SET user_id='+userId+
            ' ,vip=10 '+
            ' ,`desc`="[Vip_New:'+Number(mCnt||'0')+'M]"'+
            ' ,expiry_time=date_add('+expStart+', INTERVAL '+Number(mCnt||'0')+' MONTH)'+
            ' ,create_time=sysdate(), update_time=sysdate(), del_flg=0 '+
            ' ,update_by='+userId;

        console.log(sql);
        connection.query(sql, function(error, result) {
            connection.release();
            if(error) {
                console.log(error);
            }
            callback(error, result.insertId);

        });
    });
};

// 更新vip会员有效期
// mCnt: 有效期（月个数）可为负数
// reset: 0直接在原截止期上累加, 1重新计算截止期
ItbMemberModel.prototype.updVipMemberExpTime = function(userId, mCnt, reset, callback){

    pool.pool.getConnection(function(err, connection) {
        // 链接出错
        if(err){
            console.log('ItbMemberModel [updVipMemberExpTime] getConnection err:' + err);
            return callback(err, null);
        }
        var sql = ' UPDATE itb_member t '+
            ' SET t.desc= concat(IFNULL(t.desc,"")," ### [Vip_Upd:'+Number(mCnt||'0')+'M]") ';// 拼接之前的desc
        if(reset) {
            sql += ' ,t.last_expiry_time=t.expiry_time '+
                ' ,t.expiry_time=date_add(now(), INTERVAL '+Number(mCnt||'0')+' MONTH)';
        } else {
            sql += ' ,t.last_expiry_time=t.expiry_time '+
                ' ,t.expiry_time=date_add(t.expiry_time, INTERVAL '+Number(mCnt||'0')+' MONTH)';
        }
        sql += ' ,t.update_time=sysdate()'+
            ' ,t.update_by='+userId+
            ' WHERE t.del_flg=0 AND t.vip=10 AND t.user_id='+userId;

        console.log(sql);
        connection.query(sql, function(error, result) {
            connection.release();

            if(error) {
                console.log(error);
                callback(error);
            } else {
                callback(null);
            }
        });
    });
};
// stTime: 有效开始日期 'yyyy-mm-dd HH:MM:SS'
// mCnt: 有效期（月个数）
ItbMemberModel.prototype.updVipMemberExpTime2 = function(memberId, userId, stTime, mCnt, callback){

    pool.pool.getConnection(function(err, connection) {
        // 链接出错
        if(err){
            console.log('ItbMemberModel [updVipMemberExpTime2] getConnection err:' + err);
            return callback(err, null);
        }

        var expStart = 'now()';
        if(stTime && stTime.length>0) {
            expStart = '"'+stTime+'"';
        }

        var sql = ' UPDATE itb_member t '+
            ' SET t.desc= concat(IFNULL(t.desc,"")," ### [Vip_Upd:'+Number(mCnt||'0')+'M]") '+// 拼接之前的desc
            ' ,t.last_expiry_time=t.expiry_time '+
            ' ,t.expiry_time=date_add('+expStart+', INTERVAL '+Number(mCnt||'0')+' MONTH) '+
            ' ,t.update_time=sysdate() '+
            ' ,t.update_by='+userId+
            ' WHERE t.del_flg=0 AND t.vip=10 '+
            ' AND t.user_id='+userId+
            ' AND t.member_id='+memberId;

        console.log(sql);
        connection.query(sql, function(error, result) {
            connection.release();

            if(error) {
                console.log(error);
                callback(error);
            } else {
                callback(null);
            }
        });
    });
};

/*
* 确认用户是否是 vip
* @param userId 用户唯一标识
* @param callback 查询结果回调
*           error : 如果出错, 错误回调
*           vip   : vip 类型, 0, 非 vip, 10 vip ,各级 vip 标识待扩充
*
* */
ItbMemberModel.prototype.checkUserVipType = function(userId, callback){

    pool.pool.getConnection(function(err, connection) {
        // 链接出错
        if(err){
            console.log('ItbMemberModel [checkUserVipType] getConnection err:' + err);
            return callback(err, null);
        }
        var sql  =  " SELECT m.vip " +
            " FROM itb_user u, " +
            "      itb_member m " +
            " WHERE u.user_id= " + userId +
            "   AND u.del_flg=0 " +
            "   AND m.user_id=u.user_id " +
            "   AND m.del_flg=0 " +
            "   AND m.expiry_time > now() ";
        console.log(sql);
        connection.query(sql, function(error, result) {
            connection.release();
            if(error){
                console.log('ItbMemberModel [checkUserVipType] query err: ' + error);
            }
            if(result && result.length > 0){
                return callback(error, result[0].vip);
            } else {
                return callback(error, 0);
            }

        });
    });
};

/**
 * 获取用户 vip 信息
 * @param userId 用户唯一标识
 * @param callback 结果回调
 *          error 查询出错
 *          info vip 信息
 * */

ItbMemberModel.prototype.getUserMemberInfo = function(userId, callback){

    pool.pool.getConnection(function(err, connection) {
        // 链接出错
        if(err){
            console.log('ItbMemberModel [checkUserVipType] getConnection err:' + err);
            return callback(err, null);
        }
        var sql  =  " SELECT m.* " +
            " FROM itb_user u, " +
            "      itb_member m " +
            " WHERE u.user_id= " + userId +
            "   AND u.del_flg=0 " +
            "   AND m.user_id=u.user_id " +
            "   AND m.del_flg=0 " +
            "   AND m.expiry_time > now() ";
        console.log(sql);
        connection.query(sql, function(error, result) {
            connection.release();
            if(error){
                console.log('ItbMemberModel [checkUserVipType] query err: ' + error);
            }
            if(result && result.length > 0){
                return callback(error, result[0]);
            } else {
                return callback(error, null);
            }

        });
    });
};

/**
 * 更新vip会员有效期升级方法
 *
 * @author 王俊
 * @date 2018-05-16
 *
 * 注意: 复制自 YjxMemberModel.createVipMember
 *
 * @param {Object} options  请求参数
 * @param {Number} options.userId: 用户id
 * @param {Number} [options.memberId]: 会员id
 * @param {Number} [options.unit]: 单位 1(年), 2(季), 3(月), 4(周), 5(天), 默认单位为3(月)
 * @param {Number} [options.qty]: 对应数量(可为负数): 年数, 季度数, 月数, 周数, 天数
 * @param {Number} options.reset: 0直接在原截止期上累加, 1重新计算截止期(开始日时为当前时间, vip 过期使用), 2重新计算截止期(开始日时为stTime)
 * @param {String} [options.stTime]: 有效开始日期 'yyyy-mm-dd HH:MM:SS'
 * @param {Function} callback 回调函数
 *                      err: 更新失败
 */
ItbMemberModel.prototype.updVipMemberExpTimePro = function(options, callback){

    pool.pool.getConnection(function(err, connection) {
        // 链接出错
        if(err){
            console.log('ItbMemberModel [updVipMemberExpTime] getConnection err:' + err);
            return callback(err, null);
        }

        var expStart = 't.expiry_time';
        if(options.reset === 1) {
            expStart = 'now()';
        } else if(options.reset === 2 && options.stTime && options.stTime.length>0) {
            expStart = '"'+options.stTime+'"';
        }

        var sql = ' UPDATE itbour.itb_member t '+
            ' SET t.last_expiry_time=t.expiry_time ' +
            ' ,t.update_time=sysdate() ' +
            ' ,t.update_by='+options.userId;

        if(options.unit === 1) {// 年
            sql += ' ,t.desc= concat(IFNULL(t.desc,"")," # [Vip_Upd:'+Number(options.qty||'0')+'Year]") '+// 拼接之前的desc
                ' ,t.expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' YEAR) ';
        } else if(options.unit === 2) {// 季度
            sql += ' ,t.desc= concat(IFNULL(t.desc,"")," # [Vip_Upd:'+Number(options.qty||'0')+'Qtr]") '+// 拼接之前的desc
                ' ,t.expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' QUARTER) ';
        } else if(options.unit === 4) {// 周
            sql += ' ,t.desc= concat(IFNULL(t.desc,"")," # [Vip_Upd:'+Number(options.qty||'0')+'Week]") '+// 拼接之前的desc
                ' ,t.expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' WEEK) ';
        } else if(options.unit === 5) {// 天
            sql += ' ,t.desc= concat(IFNULL(t.desc,"")," # [Vip_Upd:'+Number(options.qty||'0')+'Day]") '+// 拼接之前的desc
                ' ,t.expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' DAY) ';
        } else {// 默认月
            sql += ' ,t.desc= concat(IFNULL(t.desc,"")," # [Vip_Upd:'+Number(options.qty||'0')+'Month]") '+// 拼接之前的desc
                ' ,t.expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' MONTH) ';
        }

        sql += ' WHERE t.del_flg=0 AND t.vip=10 AND t.user_id='+options.userId;
        if(options.memberId>0) {
            sql += ' AND t.member_id='+options.memberId;
        }

        console.log(sql);
        connection.query(sql, function(error, result) {
            connection.release();

            if(error) {
                console.log(error);
                callback(error);
            } else {
                callback(null);
            }
        });
    });
};


/**
 * 新建vip会员升级方法
 *
 * @author 王俊
 * @date 2018-05-16
 *
 * 注意: 复制自 YjxMemberModel.createVipMember
 *
 * @param {Object} options 请求参数
 * @param {Number} options.userId
 * @param {String} options.stTime: 有效开始日期 'yyyy-mm-dd HH:MM:SS'
 * @param {Number} options.unit: 单位 1(年), 2(季), 3(月), 4(周), 5(天), 默认单位为3(月)
 * @param {Number} options.qty: 对应数量: 年数, 季度数, 月数, 周数, 天数
 * @param callback
 *          err:
 *          memberId:
 */
ItbMemberModel.prototype.createVipMemberPro = function(options, callback){

    pool.pool.getConnection(function(err, connection) {
        // 链接出错
        if(err){
            console.log('YjxMemberModel [createVipMember] getConnection err:' + err);
            return callback(err, null);
        }

        var expStart = 'now()';
        if(options.stTime && options.stTime.length>0) {
            expStart = '"'+options.stTime+'"';
        }

        var sql = ' INSERT INTO itbour.itb_member '+
            ' SET user_id='+options.userId+
            ' ,vip=10 '+
            ' ,create_time=sysdate(), update_time=sysdate(), del_flg=0 '+
            ' ,update_by='+options.userId;
        if(options.unit===1) {// 年
            sql += ' ,`desc`="[Vip_New:'+Number(options.qty||'0')+'Year]" '+
                ' ,expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' YEAR) ';
        } else if(options.unit===2) {// 季度
            sql += ' ,`desc`="[Vip_New:'+Number(options.qty||'0')+'Qtr]" '+
                ' ,expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' QUARTER) ';
        } else if(options.unit===4) {// 周
            sql += ' ,`desc`="[Vip_New:'+Number(options.qty||'0')+'Week]" '+
                ' ,expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' WEEK) ';
        } else if(options.unit===5) {// 天
            sql += ' ,`desc`="[Vip_New:'+Number(options.qty||'0')+'Day]" '+
                ' ,expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' DAY) ';
        } else {// 默认月
            sql += ' ,`desc`="[Vip_New:'+Number(options.qty||'0')+'Month]" '+
                ' ,expiry_time=date_add('+expStart+', INTERVAL '+Number(options.qty||'0')+' MONTH) ';
        }

        console.log(sql);
        connection.query(sql, function(error, result) {
            connection.release();
            if(error) {
                console.log(error);
                return callback(error, null)
            }
            return callback(error, result.insertId);

        });
    });
};

// 导出
module.exports = ItbMemberModel;